# 导入必要模块：os用于读取环境变量（安全管理密钥），openai用于调用DeepSeek v3 API，同时捕获常见异常
import os
from openai import OpenAI
from openai import (
    APIError,        # API服务端错误
    BadRequestError,  # 请求参数错误（如密钥无效、模型不存在）
    AuthenticationError   # 认证失败（如密钥错误）
)

def get_salad_weight_loss_answer():
    """
    功能：调用DeepSeek v3生成资深营养师关于「轻食沙拉能否减肥」的回答
    依据：《中国居民膳食指南（2022）》，包含具体热量估算，语言亲切自然
    返回：成功则返回格式化后的回答，失败则返回错误提示
    """
    # 1. 安全配置API密钥：从环境变量读取（避免硬编码密钥导致泄露）
    # 需先在系统/终端中设置环境变量：export DEEPSEEK_API_KEY="你的DeepSeek API密钥"（Windows用set命令）
    api_key = os.getenv("DEEPSEEK_API_KEY")
    if not api_key:
        return "❌ 错误：未检测到API密钥，请先配置DEEPSEEK_API_KEY环境变量"
    
    # 初始化OpenAI客户端
    client = OpenAI(
        api_key=api_key,
        base_url="https://api.deepseek.com/v1"
    )

    # 2. 细化System Prompt：明确《中国居民膳食指南》的具体参考点，引导回答更精准
    system_prompt = """
    你是一名拥有5年以上经验的资深公共营养师，回答需严格满足以下3点：
    1. 核心依据《中国居民膳食指南（2022）》：需提及指南中「成人每日能量需求（如轻体力女性1800kcal/天、男性2250kcal/天）」「膳食结构均衡（谷薯类、蔬菜水果、优质蛋白、烹调油比例）」「能量负平衡是减肥核心」等关键原则；
    2. 具体热量估算：需举例常见轻食沙拉的食材搭配（如基底+蛋白+酱汁），并估算每100g/每份（约300-400g）的热量范围，比如「生菜50g约12kcal+鸡胸肉50g约55kcal+千岛酱20g约60kcal」这类具体拆解；
    3. 语言风格：亲切自然如朋友聊天，避免专业术语堆砌，比如用「咱们平时吃的沙拉」代替「轻食沙拉膳食组合」，结尾可加1个小建议（如酱汁少放更控卡）。
    """

    # 3. 用户提问（保持原需求，可根据场景扩展）
    user_prompt = "轻食沙拉能减肥吗？我平时午餐常吃，想知道怎么吃才真的能瘦～"

    # 4. API调用参数配置：控制回答随机性（temperature=0.3更精准）、长度（max_tokens避免过长/过短）
    try:
        response = client.chat.completions.create(
            model="deepseek-chat",        # DeepSeek v3模型
            messages=[
                {"role": "system", "content": system_prompt.strip()},  # 去除多余空格
                {"role": "user", "content": user_prompt}
            ],
            temperature=0.3,              # 随机性：0-1，越低回答越稳定精准（营养师回答需严谨）
            max_tokens=800,               # 最大 tokens：控制回答长度（约400-500中文字符，足够详细）
            timeout=15                    # 请求超时时间：15秒（避免长时间等待）
        )

        # 5. 提取并格式化回答（只取content部分，增加友好前缀）
        answer = response.choices[0].message.content.strip()
        return f"🥗 营养师关于「轻食沙拉能否减肥」的回答：\n\n{answer}\n\n💡 小提醒：以上热量为估算值，实际需根据食材重量调整哦～"

    # 6. 捕获常见异常，返回易懂的错误提示
    except AuthenticationError:
        return "❌ 认证失败：DeepSeek API密钥错误或无效，请检查密钥是否正确"
    except BadRequestError as e:
        return f"❌ 请求参数错误：{str(e)}（可能是模型不存在或tokens超限）"
    except APIError as e:
        return f"❌ API服务错误：{str(e)}（可能是DeepSeek服务器问题，可查看官网状态）"
    except Exception as e:
        return f"❌ 其他错误：{str(e)}（如网络断开，请检查网络连接）"

# 7. 调用函数并打印结果（实际使用时直接运行即可）
if __name__ == "__main__":
    result = get_salad_weight_loss_answer()
    print(result)